class Solution {
public:
    vector<int> spiralOrder(vector<vector<int>>& matrix) {
        vector<int> v;
        if(matrix.size()==0)
            return v;
        if(matrix[0].size()==0)
            return v;
        //记录矩阵的左右,也就是列
        int left=0;
        int right=matrix[0].size()-1;
        //记录矩阵的上下边界，也就是行
        int up=0;
        int bottom=matrix.size()-1;
        while(1)
        {
            //从左到右
            for(int i=left;i<=right;++i)
            {
                v.push_back(matrix[up][i]);
            }
            if(++up>bottom)
                break;
            //从上到下
            for(int i=up;i<=bottom;++i)
            {
                v.push_back(matrix[i][right]);
            }
            if(--right<left)
                break;
            //从右到左
            for(int i=right;i>=left;--i)
            {
                v.push_back(matrix[bottom][i]);
            }
            if(--bottom<up)
                break;
            //从下到上
            for(int i=bottom;i>=up;--i)
            {
                v.push_back(matrix[i][left]);
            }
            if(++left>right)
                break;
        }
        return v;
    }
};